package com.xutianpeng.disk.file.service;

import org.springframework.http.ResponseEntity;
import java.io.InputStream;
import java.util.List;

public interface FileIoService {
    /**
     * 文件类型：文件
     */
    Integer FILE_TYPE_FILE = 0;
    /**
     * 文件类型：文件夹
     */
    Integer FILE_TYPE_FOLDER = 1;
    /**
     * 文件分隔符
     */
    String FILE_SEPARATOR = "/";

    /**
     * 文件同步
     */
    void syncFileData();

    /**
     * 创建文件夹
     * @param parentId 父文件夹ID
     * @param folderName 文件夹名称
     */
    void mkdirFileInfo(String parentId, String folderName);

    /**
     * 上传文件
     * @param parentId 父文件夹ID
     * @param fileName 文件名
     * @param inputStream 文件输入流
     */
    void uploadFile(String parentId, String fileName, InputStream inputStream);

    /**
     * 将文件移至回收站
     * @param fileUuid 文件唯一标识
     */
    void deleteToRecycle(String fileUuid);

    /**
     * 批量移动文件到目标文件夹
     * @param fileUuids 需要移动的文件UUID列表
     * @param targetFolderUuid 目标文件夹UUID
     */
    void moveFiles(List<String> fileUuids, String targetFolderUuid);

    /**
     * 复制文件
     * @param parentId 目标父文件夹ID
     * @param srcUuidList 源文件UUID列表（逗号分隔）
     */
    void copyFile(String parentId, String srcUuidList);

    /**
     * 获取分享链接
     * @param fileUuid 文件UUID
     * @return 分享链接
     */
    String getShareUrl(String fileUuid);

    /**
     * 生成带有效期的分享链接
     * @param fileUuid 文件UUID
     * @param fileValidity 有效期（单位：天）
     * @return 分享链接
     */
    String queryShareUrl(String fileUuid, Integer fileValidity);

    /**
     * 文件下载
     * @param fileUuid 文件UUID
     * @return 包含文件字节数组的响应实体
     */
    ResponseEntity<byte[]> downFile(String fileUuid);
}